import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

/**
 * @Author: renpu
 * @Date: 2019/3/14 14:37
 * @Description:
 */
public class Shiro {

    //用户输入数据；
    private String username="xiaowangba";
    private String password="123456";

    @Test
  public void test1(){

        //获取与数据库的联系，通过shiro.ini配置文件作为模拟数据库,
        IniSecurityManagerFactory factory=new IniSecurityManagerFactory("classpath:shiro.ini");

        //通过安全管理工厂通过调用无参构造方法，创建安全管理对象；
        SecurityManager securityManager = factory.getInstance();

        //将模拟数据库与安全管理对象建立关系；
        SecurityUtils.setSecurityManager(securityManager);

        //创建Subject对象
        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken usernamePasswordToken=new UsernamePasswordToken(username,password);

        try{
            subject.login(usernamePasswordToken);
            System.out.println("登录成功");
        }catch (UnknownAccountException e){
            System.out.println("账户匹配失败");
        }catch (IncorrectCredentialsException e1){
            System.out.println("密码输入有误");
        }

        //检测是否登录成功；
        boolean authenticated = subject.isAuthenticated();
        System.out.println(authenticated);
       /* subject.logout();*/
        /*authenticated=subject.isAuthenticated();
        System.out.println(authenticated);*/

        //验证用户拥有什么权利；
        if(authenticated){
            boolean permitted = subject.isPermitted("banner:add");
            if(permitted){
                System.out.println("当前管理员拥有对轮番图添加的操作");
            }
        }

        //验证用户有什么角色
        boolean edit = subject.hasRole("edit");
        if(edit){
            System.out.println("当前用户拥有编辑的角色");
        }else {
            System.out.println("不拥有编辑的角色");
        }

        //验证当前管理员是否拥有文章的操作；
        boolean permitted1 = subject.isPermitted("article:*");
        if(permitted1){
            System.out.println("当前管理员拥有对文章模块的操作");
        }


    }

}
